def a_before_b(s:str):
    # 首先判断长度，直接返回避免数组越界
    n = len(s)
    if n == 1:
        return True

    # 利用前后指针找到a和b的交界地带
    pre = 0
    post = 1

    for i in range(n-1):
        if s[pre] > s[post]:
            return False
        pre+= 1
        post+=1

    # 整个循环跑完
    return True
# 101101

def euler_sieve(n:int):
    is_primes = [True]*(n+1)
    primes = []
    is_primes[0] = is_primes[1] = False

    for i in range(2,n+1):
        if is_primes[i]:
            primes.append(i)

        for j in primes:
            if i*j <= n:
                is_primes[i*j] = False
            
            # 因为当i已经可以取模j时，说明在此之前已经有更小的质数将某个合数标记
            if i%j == 0:
                break
    
    return primes


if __name__ == "__main__":
    print(euler_sieve(100))

